package com.seven.good.service;

import com.seven.good.dto.GoodConditionDto;
import com.seven.good.exception.GoodException;
import com.seven.good.exception.ServiceException;
import com.seven.good.pojo.BidRecord;
import com.seven.good.pojo.Good;
import com.seven.good.pojo.HomePage;

import java.util.List;

public interface GoodService {

    /**
     * @Description：根据当前围观数从大到小查询推荐商品
     * @Author: ytj
     * @return List<Good> 商品列表
     * @CreateDate:  19/10/16
     */
    List<Good> listGoodsByCircuseeNo();

    /**
     * @Description：根据当前竞拍次数，从大到小查询推荐商品
     * @Author: ytj
     * @return List<Good> 商品列表
     * @CreateDate:  19/10/16
     */
    List<Good> listGoodsByBidNo();

    /**
     * @Description：根据当前报名参与次数，从大到小查询推荐商品
     * @Author: ytj
     * @return List<Good> 商品列表
     * @CreateDate:  19/10/16
     */
    List<Good> listGoodsBySignUpNo();

    /**
     * @Description：获取一个主题页对象
     * @Author: ytj
     * @return HomePage 主题页对象
     * @CreateDate:  19/10/19
     */
    HomePage getOneTheme();

    /**
     * @Description：获取竞拍中的价值最大的商品
     * @Author: hasee
     * @return Good 商品对象
     * @CreateDate:  19/10/19
     */
    Good getExGood();

    /**
     * @Description：更新目标商品的结束时间
     * @Author: ytj
     * @param: gid 商品编号
     * @CreateDate:  19/10/23
     */
    boolean updateEndtime(Integer gid);

    /**
     * @Description：根据ID查询商品
     * @Author: ytj
     * @param: gid 商品编号
     * @return Good 单个商品
     * @CreateDate:  19/10/23
     */
    Good getGoodById(Integer gid);

    /**
     * @ Description   :    获取今日所有正在拍卖和即将拍卖的商品，根据商品选择，按状态码升序，结束时间升序；
     * 按照参数和系统的页大小分页
     * @ Author        :  lee
     * @ param        :     goodType：商品类型的id,currentPage：当前页
     * @ return       :     List<Good>：pagehelper封装
     * @ exception    :     ServiceException
     * @ CreateDate    :  2019/10/25 11:58
     */
    List<Good> listGoodsByTypeOnToday(Integer goodType,Integer currentPage) throws ServiceException;
    /**
     * @ Description   :    获取传入的查询条件，默认根据商品选择，按状态码升序，结束时间升序；
     * 按照参数和系统的页大小分页
     * @ Author        :  lee
     * @ param        :     condition：查询条件的封装对象,currentPage：当前页
     * @ return       :     List<Good>：pagehelper封装
     * @ exception    :     ServiceException
     * @ CreateDate    :  2019/10/25 11:58
     */
    List<Good> listGoodsByCondition(GoodConditionDto condition,Integer currentPage) throws ServiceException;
    /**
     * @ Description   :  传入商品的封装对象和持续时间（单位h），计算结束时间，插入数据库
     * @ Author        :  lee
     * @ param        :     good：封装的商品对象，durationTime：拍卖持续时长，单位为h
     * @ return       :     插入商品的gid
     * @ exception    :     商品验证不通过抛出GoodException，数据库问题抛出ServiceException
     * @ CreateDate    :  2019/10/25 12:05
     */
    Integer insertGoodAndGetGid(Good good,Long durationTime) throws GoodException,ServiceException;
    /**
     * @ Description   :  更新商品的url
     * @ Author        :  lee
     * @ param        :     url：商品封面的url；gid：商品的gid
     * @ exception    :     ServiceException
     * @ CreateDate    :  2019/10/25 12:09
     */
    void updateUrlByGid(String url,Integer gid) throws ServiceException;
    /**
     * @ Description   :  根据拍品gid查询拍品信息
     * @ Author        :  lee
     * @ param        :     gid：商品gid
     * @ return       :     Good
     * @ exception    :     ServiceException
     * @ CreateDate    :  2019/10/25 12:10
     */
    Good getGoodByGid(Integer gid) throws ServiceException;

    //更新提醒人数方法
    void modifyRemindNoByGid(Integer gid);

    //更新围观人数方法
    void modifyCircuseeNoByGid(Integer gid);

    //更新报名人数方法
    void modifySignupNoByGid(Integer gid);

    /**
     * @Description：更新当前价格和竞拍数
     * @Author: ytj
     * @param: bidRecord 竞价记录
     * @CreateDate:  19/10/27
     */
    void updateNowPriceAndBidNo(BidRecord bidRecord);
}
